স্ট্যাকের ধারণা
স্ট্যাক হলো একটি লাস্ট-ইন ফার্স্ট-আউট (LIFO - Last In, First Out) ডেটা স্ট্রাকচার, যেখানে সর্বশেষে যে উপাদানটি যোগ করা হয়, সেটিই প্রথমে সরানো হয়। স্ট্যাক সাধারণত একটি নির্দিষ্ট ক্রমে উপাদান সংরক্ষণ এবং ম্যানেজ করতে ব্যবহৃত হয়। স্ট্যাকের প্রধান ব্যবহারগুলো হলো রিকর্সিভ ফাংশন কল, ইউন্ডু অপারেশন, এবং ব্রাউজারে পেজের ব্যাক বাটন পরিচালনা।
স্ট্যাকের প্রধান অপারেশনগুলো
স্ট্যাকে সাধারণত তিনটি প্রধান অপারেশন থাকে:
- Push: স্ট্যাকে নতুন উপাদান যোগ করা।
- Pop: স্ট্যাক থেকে সর্বশেষ উপাদান সরানো।
- Peek (or Top): স্ট্যাকের শীর্ষে থাকা উপাদানটি দেখা, কিন্তু সরানো হয় না।
১. Push অপারেশন
Push অপারেশনের মাধ্যমে স্ট্যাকের শীর্ষে নতুন একটি উপাদান যোগ করা হয়। স্ট্যাকের সর্বশেষ উপাদানটি এভাবেই শীর্ষে থাকে। স্ট্যাকের আকার নির্দিষ্ট থাকলে এটি পূর্ণ (Full) হওয়া পর্যন্ত Push করা যায়।
ধাপসমূহ:
- নতুন উপাদান যোগ করার আগে চেক করুন যে স্ট্যাক পূর্ণ কিনা।
- স্ট্যাক পূর্ণ না হলে শীর্ষে উপাদান যোগ করুন।
উদাহরণ:
স্ট্যাক: [5, 10, 15]
Push(20)
স্ট্যাক: [5, 10, 15, 20]
২. Pop অপারেশন
Pop অপারেশনের মাধ্যমে স্ট্যাকের শীর্ষে থাকা উপাদানটি সরানো হয়। এটি এলIFO এর ভিত্তিতে কাজ করে, তাই সর্বশেষে যোগ করা উপাদানটি প্রথমে সরানো হয়। Pop অপারেশন প্রয়োগের আগে চেক করা উচিত যে স্ট্যাক ফাঁকা (Empty) আছে কিনা।
ধাপসমূহ:
- শীর্ষের উপাদান সরানোর আগে চেক করুন যে স্ট্যাক ফাঁকা কিনা।
- ফাঁকা না থাকলে শীর্ষের উপাদানটি সরিয়ে নিন।
উদাহরণ:
স্ট্যাক: [5, 10, 15, 20]
Pop()
স্ট্যাক: [5, 10, 15]
৩. Peek অপারেশন
Peek অপারেশনটি স্ট্যাকের শীর্ষে থাকা উপাদানটি দেখতে সাহায্য করে, তবে এটিকে সরানো হয় না। এটি স্ট্যাক ফাঁকা না থাকলে সর্বশেষ যোগ করা উপাদানটি প্রদর্শন করে।
ধাপসমূহ:
- শীর্ষে থাকা উপাদানটি দেখতে স্ট্যাক ফাঁকা কিনা চেক করুন।
- শীর্ষে থাকা উপাদানটি দেখান (কিন্তু সরাবেন না)।
উদাহরণ:
স্ট্যাক: [5, 10, 15, 20]
Peek()
আউটপুট: 20
স্ট্যাক: [5, 10, 15, 20] // উপাদান সরানো হয়নি
স্ট্যাক অপারেশনের উদাহরণ (Python কোড)
class Stack:
def __init__(self):
self.stack = []
# Push অপারেশন
def push(self, item):
self.stack.append(item)
# Pop অপারেশন
def pop(self):
if not self.is_empty():
return self.stack.pop()
else:
return "Stack is empty"
# Peek অপারেশন
def peek(self):
if not self.is_empty():
return self.stack[-1]
else:
return "Stack is empty"
# Stack ফাঁকা কিনা চেক করা
def is_empty(self):
return len(self.stack) == 0
# ব্যবহার
stack = Stack()
stack.push(10)
stack.push(20)
stack.push(30)
print("Peek:", stack.peek()) # আউটপুট: 30
print("Pop:", stack.pop()) # আউটপুট: 30
print("Pop:", stack.pop()) # আউটপুট: 20
print("Peek:", stack.peek()) # আউটপুট: 10
স্ট্যাকের ব্যবহার ক্ষেত্র
- ফাংশন কল স্ট্যাক: প্রোগ্রামে রিকার্সিভ ফাংশন কলগুলো স্ট্যাকের মাধ্যমে ম্যানেজ করা হয়।
- ব্রাউজার ব্যাক ফাংশন: ব্রাউজারের ব্যাক বাটন ক্লিকের ইতিহাস স্ট্যাকে সংরক্ষণ করা হয়।
- পোলিশ নোটেশন: ইনফিক্স, পোস্টফিক্স, এবং প্রিফিক্স এক্সপ্রেশন ম্যানেজ করার জন্য স্ট্যাক ব্যবহৃত হয়।
- ইউন্ডু অপারেশন: কোনো প্রোগ্রামে পূর্বের অবস্থায় ফিরে যাওয়ার জন্য স্ট্যাক ব্যবহৃত হয়।
উপসংহার
স্ট্যাক একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা LIFO ভিত্তিতে কাজ করে। এটি বিভিন্ন ধরনের সমস্যায় কার্যকরী সমাধান দেয়, যেমন ফাংশন কল স্ট্যাক, ইউন্ডু অপারেশন, এবং ইনফিক্স-টু-পোস্টফিক্স রূপান্তর। Push, Pop, এবং Peek অপারেশন স্ট্যাক ব্যবহারের জন্য প্রয়োজনীয় এবং কার্যকরী ভূমিকা পালন করে।
Read more